﻿package com.application
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.display.Stage;
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////
	// ApplicationDefault ::
	// - l'application (*.fla) étend cette classe, par le biais de sa classe enfant
	// - toutes les méthodes implémentées ici sont donc disponibles dans toute l'application
	/////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	public class ApplicationDefault extends MovieClip
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// MEMBRES DE CLASSE
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// point d'accès à l'objet Stage
		public static var GLOBAL_STAGE:Stage;
		// propriété permettant l’exécution de la fonction de rappel
		private var rappel:Function;
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// CONSTRUCTEUR
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		function ApplicationDefault ( )
		{
			// point d'accès à l'objet stage : la scène principale
			ApplicationDefault.GLOBAL_STAGE = stage;
			trace("AD constructor :: \nthis -> "+ this + "\nstage -> " + stage + "\n------>\n" );
		}
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// EXEMPLE DE METHODES IMPLEMENTEES POUR TOUTE L'APPLI
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// méthode de déplacement de la tête de lecture personnalisé
		public function myGotoAndStop ( pImage:int, pFonction:Function ):void
		{
			// écoute de l'événement Event.RENDER
			addEventListener ( Event.RENDER, miseAJour );
			// déplacement de la tête de lecture
			gotoAndStop ( pImage );
			// retourne un objet permettant
			rappel = pFonction;
			// force la diffusion de l'événement Event.RENDER
			stage.invalidate();
		}
		
		private function miseAJour ( pEvt:Event ):void
		{
			// nous tentons d'appeler la fonction de rappel
			try
			{
				rappel();
			// si cela échoue, nous affichons un message d'erreur
			}
			catch ( pErreur:Error )
			{
				trace("Erreur : La méthode de rappel n'a pas été définie");
				// dans tout les cas, nous supprimons l'écoute de l'événement Event.RENDER
			}
			finally
			{
				removeEventListener ( Event.RENDER, miseAJour );
			}
		}
		
		public function getGlobalStage() : Stage
		{
			trace( "{ -- gGS in its class : " + ApplicationDefault.GLOBAL_STAGE + " -- }" ); // == null
			return ApplicationDefault.GLOBAL_STAGE;
		}
	}
}